Report Server - Anotações

Finalidade

Se você trabalha com report server está sempre precisando fazer tarefas de adequação, formatação dos itens dos relatórios.
Nesta lista estão os principais itens utilizados nessa atividade.

Cores

Apesar das cores no html terem nomes idênticos as do Report Server elas são diferentes, pelo menos nos tons. Aliás existe uma conversão de cores entre o Report Server e a exportação desse relatório para MHTML. Por exemplo, a cor Verde, Amarelo, Vermelho para criar um semáforo, por exemplo, o amarelo será convertido para uma cor que é tudo menos amarelo. Parece mais ouro bem apagado, escuro. Na lista abaixo a cor de fundo das caixas de texto tem a mesma cor do Report Server.

No report Server temos as seguintes cores básicas ( em inglês - Só 1a letra maiúscula ):

Black - Preta
Brown - Marron
Dark Olive Green - Verde Oliva escuro
Dark Green - Verde Escuro
Midnight Blue - Azul Escuro
Dark Blue - Azul Escuro
Indigo - Azul estilo Jeans
Dim Grey - Cinza escurecido
Marron - Marrom diferenciado.
Tomato - Tomate
Olive - Oliva
Green - Verde
Teal - Azul petróleo claro
Blue - Azul
Slate Blue - Azul ardósia (azul quase roxo)
Grey - Cinza
Red - Vermelho
Orange - Laranja
Lime Green - Verde limão
Sea Green - Verde Mar
Aqua - Azul marinho claro
CornFlower Blue - Azul flor milho
Dark Violet - Violeta Escuro
Silver - Prata
Pink - Rosa
Gold - Ouro
Yellow - Amarelo
Lime - Lima
Turquoise - Turquesa
Light Blue - Azul Claro
Purple - Púrpura
Light Grey - Cinza Claro
HotPink - Rosa Quente
Tan - Marron Claro
Khaki - Caqui ( verde bem claro )
Light Green - Verde Claro
Pale Turquoise - Turquesa clara
Light Steel Blue - Azul Claro Metalizado
Plum - Ameixa (rosa mais escuro)
White - Branco

1 : Cor de Fundo da caixa de texto (Background Color) - Dinâmica

Neste caso a cor de fundo da caixa vai mudar de acordo com um detalhe do relatório.

2.1 : Cor de Fundo da caixa de texto (Background Color) - Dinâmica - Zebrada

Fazer um relatório zebrado é fundamental para destacar a linha corrente da anterior e posterior pois tem a cor de fundo diferente de ambas.

Colocando a cor de fundo da linha azul clara se o número da linha for par:
=IIF(RowNumber(Nothing) MOD 2, "White","Lavender")

2.2 : Mais de 2 Cores de Fundo na mesma caixa de texto - Dinâmica

Neste caso se o conteúdo do campo for x ele coloca uma cor de fundo ... e para ficar bom fiz o exemplo zebrado, ou seja, o mesmo campo terá 4 cores, 2 se o texto for x e 2 quando não for:

=IIF(Fields!TipoTitulo_Descricao.Value = "x",IIF(RowNumber(Nothing) MOD 2,"LightBlue","LightGreen"),IIF(RowNumber(Nothing) MOD 2,"LightGrey","White"))

2.3 : Se os 2 campos tiverem conteúdos iguais será colocada uma cor, senão outra

No exemplo abaixo a cor de fundo será verde se o conteúdo dos 2 campos forem iguais, senão será cinza<

=IIF(Fields!campox.Value=Fields!campoy.Value ,"LightGreen","LightGrey")

2.4 : Se o campo tiver valor coloca uma cor, senão outra

Neste exemplo se o campo não tiver nada ele coloca a cor de fundo branca...se tiver Verde Claro.

=IIF(RowNumber(Nothing) MOD 2, "White","LightGreen")

2.5 : Diversas cores para o mesmo campo

Neste exemplo será atribuida a cor de acordo com o valor numérico do campo. O exemplo é o término do prazo para um evento.

=Switch (
    Fields!Dias.Value >= 40,"LightGreen",
    Fields!Dias.Value > 10,"Khaki",
    Fields!Dias.Value <= 10,"Red"
)

Coluna Dias :
x a 40        >= 40 dias : Verde,
39 a 20        >= 20 dias : Amarelo,
10 a 0        <= 10 dias : Vermelho.

A cor Khaki parece mais com amarelo que a cor yellow.

Colocando a cor do fundo de acordo com o valor do campo. Neste exemplo se o valor for zero ele coloca o fundo vermelho se não Preto.
=IIF(Fields!Profit.Value < 0, "Red", "Black")
Note que essa expressão deverá ser colocada no campo 'cor de fundo' do elemento.

'Você pode aplicar a verificação ao script do próprio campo.
=IIF(Me.Value < 0, "Red", "Black")


3 : Exibindo ou escondendo um elemento do formulário

A grande maioria dos componentes dos relatórios do report server possuem a propriedade 'Hidden' que se possuir o valor true esconde o elemento e se for false ele exibe o elemento.

Note que ao esconder o elemento o relatório é redesenhado comprimido e ao exibir o elemento o relatório é exibido expandido pelo espaço ocupado pelo elemento

3.1 - Se um parâmetro tiver o valor x esconde o elemento, mas se não o campo será exibido.
=IIF(Parameters!prx.Value="x",FALSE,TRUE)

3.2 - Se um parâmetro tiver o valor x ou nulo esconde o elemento, mas se não o campo será exibido.
=IIF((Parameters!prx.Value="NOVOS") OR (Parameters!prx.Value=Nothing) ,FALSE,TRUE)

3.3 - Condicionando a exibição do elemento a mais de um parâmetro.
=IIF(Parameters!prx.Value="x",FALSE,IIF(Parameters!prx.Value="y",FALSE,TRUE))
Neste caso se o valor do parâmetro for 'x' o controle será exibido, mas se for y também será exibido. Se o conteúdo do campo for diferente de x e y ele não será exibido.


4 - Data e hora

Exibindo a Data e horário que o relatório foi emitido:
"Emissão em : " + Globals!ExecutionTime

Removendo de um campo dateTime as horas:min:seg, ou seja, o horário deixando apenas a data
="Emissão: " + FormatDateTime(Globals!ExecutionTime,DateFormat.ShortDate)

Formatando uma data para um padrão diferente da do relatório. No exemplo abaixo, pt-BR
="Emissão: " + Format(Globals!ExecutionTime,”dd/MM/yyyy”)

Formatando uma data para um padrão diferente da do relatório. Diversos modelos
=UCase(Format(Parameters!StartDate,Value(0),"dd-MMM-yyy"))
=Format(CDate(Fields!YourDate.Value), "dd.MM.yyyy")
=Format(CDate(Parameters!Data_Inicial.Value), "yyyyMMdd")

Exibindo a Data corrente:
=Today()

Exibindo só o ano da data:
=year(today ())

Adicionando um período a data atual:
= Date_Add ("D", 6, today ())        -- 6 dias
= Date_Add ("M", 6, Today ())        -- 6 meses
= Date_Add ("Y" 6, Today ())        -- 6 anos


5-Formatação de campos numéricos

Formatação em porcentagem:
=FormatPercent((Fields!Valor1.Value - Fields!Valor2.Value)/Fields!Valor2.Value,2)

Formatação em dinheiro - Colocado até os . e , corretos :
=FormatNumber(Fields!Valor2.Value,2)


Formatando um número - Colocando a casa de milhares
Selecione a célula de resultado onde o valor está sendo exibido
Vá no box 'Number'
Selecione a caixa 'format' cole a formatação no modelo abaixo. ex: ="###,###,##0.00"
# significa um campo numérico de 0 a 9 sendo que se for nulo ele não será exibido.
0 significa um campo numérico de 0 a 9 sendo que se for zero ele será exibido.
O formato é em inglês ...ponto é vírgula e vírgula é ponto.

Trocando o . de quantia monetária do inglês pela , do português.
=Replace(Fields!VALOR.Value,".",",")


6 - Campos de um Dataset

Exibindo o valor de um campo de um dataset.
=Fields!TIPO_DE_INFORMACAO.Value

Destacando um campo se ele tem um certo valor. No exemplo abaixo ele coloca em negrito se o campo for maior que 2.000.000
=Iif(SUM(Fields!Sales.Value)>=2000000,"Bold","Default")

7 - Parâmetros

7.1 - Exibindo o Usuário utilizado na emissão do relatório:
" por " + User!UserID

7.2-Um parâmetro qualquer do relatório
= "Situação : " + Parameters!SITUACAO.Value

7.3 - Se dentro de um string existir um string específico. No exemplo um Where dependendo do parâmetro
where Sales in ( @paramSales )


8 - Conversão de tipos

8.1 - Convertendo para string. Convertendo um campo numérico para o tamanho da fonte de letras
=str( (Fields!Row_Level.Value * 4) + 2 ) + "pt"


9 - JavaScript


9.1 - Exibindo ou concatenando uma variável do relatório.
" & Variables!Pasta.Value & "

9.2 - Exemplo de Case

SELECT YearName, Col2, Col3
FROM FactTable
WHERE 1 = CASE
    WHEN @Year = "All" THEN 1
    WHEN @Year = YearName THEN 1
    ELSE 0
END

Colocando a chamada de um relatório no clique de um link.
="javascript:void window.open(" Globals!ReportServerUrl  & "?/Relx/(R016D1)+-+Fluxo Caixa+-+Analitico&rs:Command=Render"
&"param1=" & Parameters!prx.Value & "&param2=" & Fields!GRUPO.Value &"&prMesInicial=" & RIGHT("00" + CSTR(Month(Parameters!prDataInicial.Value)),2)